#pragma once
#include "ASN1Encodable.h"
#include "ASN1ObjectIdentifier.h"

namespace AppliedCryptography
{
	class PKCSContent : public ASN1Encodable
	{
	private:
		ASN1ObjectIdentifier* _contentOID;
		ASN1Encodable* _content;

	protected:
		PKCSContent(ClassBits classBits, ConstructedBit constucted, TypeNumberBits number);

	public:
		PKCSContent(ASN1ObjectIdentifier* contentOID = new ASN1ObjectIdentifier());
		PKCSContent(std::string contentOIDValue, ASN1ObjectIdentifier* contentOID = new ASN1ObjectIdentifier());
		virtual ~PKCSContent();

	public:
		virtual ASN1ObjectIdentifier& getPKCSContentType() const;
		virtual PKCSContent& setPKCSContentType(ASN1ObjectIdentifier& oid);
		virtual ASN1Encodable& getPKCSContent() const;
		virtual PKCSContent& setPKCSContent(ASN1Encodable* content);

	public:
		virtual std::vector<byte> getContentBits() const;
	};
}; // namespace AppliedCryptography
